package com.xxxtea.ws;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

import javax.annotation.Resource;

/**
 * WebSocket配置类
 * 
 * 该配置类用于配置WebSocket服务，包括：
 * - 启用WebSocket功能
 * - 注册WebSocket处理器
 * - 配置WebSocket拦截器
 * - 设置允许的源域名
 * 
 * @author badman
 * @since 1.0.0
 */
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
	
	/**
	 * WebSocket消息处理器，用于处理WebSocket连接和消息
	 */
	@Resource
	private WebSocketHandler webSocketHandler;
	
	/**
	 * WebSocket认证拦截器，用于在握手阶段验证用户身份
	 */
	@Resource
	private WebSocketAuthInterceptor webSocketAuthInterceptor;

	/**
	 * 注册WebSocket处理器
	 * 
	 * 配置WebSocket的访问路径、拦截器和跨域设置
	 * 
	 * @param registry WebSocket处理器注册表
	 */
	@Override
	public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
		// 注册WebSocket处理器，设置访问路径为 /ws
		registry.addHandler(webSocketHandler, "/ws")
				// 添加认证拦截器，确保只有已登录用户才能建立连接
				.addInterceptors(webSocketAuthInterceptor)
				// 设置允许所有源域名访问（生产环境建议限制具体域名）
				.setAllowedOrigins("*");
	}
}